<?php
    // +----------------------------------------------------------------------
    // | ThinkPHP [ WE CAN DO IT JUST THINK ]
    // +----------------------------------------------------------------------
    // | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
    // +----------------------------------------------------------------------
    // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
    // +----------------------------------------------------------------------
    // | Author: zhangyajun <448901948@qq.com>
    // +----------------------------------------------------------------------
    namespace think\model;

    use think\Collection as BaseCollection;
    use think\Model;

    class Collection extends BaseCollection {
        /**
         * 返回数组中指定的一列
         * @param string      $column_key
         * @param string|null $index_key
         * @return array
         */
        public function column($column_key, $index_key = null) {
            if (function_exists('array_column')) {
                return array_column($this->toArray(), $column_key, $index_key);
            }
            return parent::column($column_key, $index_key);
        }

        /**
         * 延迟预载入关联查询
         * @access public
         * @param mixed $relation 关联
         * @return $this
         */
        public function load($relation) {
            $item = current($this->items);
            $item->eagerlyResultSet($this->items, $relation);
            return $this;
        }

        /**
         * 设置需要隐藏的输出属性
         * @access public
         * @param array $hidden   属性列表
         * @param bool  $override 是否覆盖
         * @return $this
         */
        public function hidden($hidden = [], $override = false) {
            $this->each(function ($model) use ($hidden, $override) {
                /** @var Model $model */
                $model->hidden($hidden, $override);
            }
            );
            return $this;
        }

        /**
         * 设置需要输出的属性
         * @param array $visible
         * @param bool  $override 是否覆盖
         * @return $this
         */
        public function visible($visible = [], $override = false) {
            $this->each(function ($model) use ($visible, $override) {
                /** @var Model $model */
                $model->visible($visible, $override);
            }
            );
            return $this;
        }

        /**
         * 设置需要追加的输出属性
         * @access public
         * @param array $append   属性列表
         * @param bool  $override 是否覆盖
         * @return $this
         */
        public function append($append = [], $override = false) {
            $this->each(function ($model) use ($append, $override) {
                /** @var Model $model */
                $model->append($append, $override);
            }
            );
            return $this;
        }
    }
